const isProd = process.env.NODE_ENV === 'production'
const path = require('path')
// 统一配置多页
const glob = require('glob');
var pages = {};
glob.sync('./src/pages/**/main.js').forEach(filePath => { 
  let chunk = filePath.split('./src/pages/')[1].split('/main.js')[0];
  pages[chunk] = {
    entry: filePath,
    template: 'public/index.html',
    filename: chunk + '.html',
    title: chunk,
    chunks: ['chunk-vendors', 'chunk-common', 'chunk-echarts','chunk-element-ui', chunk],
  }
})

// 根据运行projectname启动/打包对应应用
const getApps = function (pages) { 
  const argvs = process.argv;
  const appName = argvs[argvs.length - 1];
  const keys = Object.keys(pages);
  if (keys.indexOf(appName) > -1) {
    var apps = Object();
    apps[appName] = pages[appName];
    return apps;
  } else { 
    return pages;
  }
}
pages = getApps(pages);

module.exports = {
  publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
  // publicPath: '/', //部署应用时的根路径(默认'/'),也可用相对路径(存在使用限制)
  outputDir: 'dist', //运行时生成的生产环境构建文件的目录(默认'dist'，构建之前会被清除)
  assetsDir: 'assets', //静态资源目录(js、css、img、fonts)，相对outputDir的目录(默认'')
  indexPath: 'index.html', //指定生成index.html的输出路径(相对outputDir)也可以是绝对路径
  lintOnSave: true, //是否开启ESlint（保存时检查）
  productionSourceMap: false, //生产环境是否生成 sourceMap 文件
  runtimeCompiler: false, // 是否使用包含运行时编译器的 Vue 构建版本 
  pages: pages,
  // { //pages里配置的路径和文件名在你的文档目录必须存在，否则启动服务会报错
  //   index: { //除了 entry 之外都是可选的
  //     entry: 'src/main.js', //page的主入口
  //     template: 'public/index.html', //模板来源
  //     filename: 'index.html', //在 dist/index.html 的输出
  //     //title在template中使用：<title><%=htmlWebpackPlugin.options.title%></title>
  //     title: '星云平台',
  //     chunks: ['chunk-vendors', 'chunk-common', 'index']
  //     // 在这个页面中包含的块，默认情况下会包含,提取出来的通用 chunk 和 vendor chunk
  //   },
    // subpage: 'src/subpage/main.js'
    //官方解释：当使用只有入口的字符串格式时，模板会被推导为public/subpage.html
    //若找不到就回退到public/index.html，输出文件名会被推导为subpage.html
  // },
  // css相关配置
  css: {
    extract: true,     // 是否分离css（插件ExtractTextPlugin）
    // extract: isProd ? {
    //   ignoreOrder: true
    // } : false,
    sourceMap: false, // 是否开启 CSS source maps
    loaderOptions: {
      // css预设器配置项
    },
    // modules: false  // 是否启用 CSS modules for all css / pre-processor files.
  },
   // webpack-dev-server 相关配置
  devServer: { //环境配置
    // index: "project1.html",
    host: 'localhost',
    port: 8080,
    https: false, //是否开启https
    hotOnly: false, //是否配置热更新
    open: true, //配置自动启动浏览器
    proxy: { //配置多个代理跨域(配置一个 proxy: 'http://localhost:4000' )
      '/api': {
        // 测试环境
        // target: 'http://iot-lebdtt.fat.qa.pab.com.cn/',
        target: 'http://iot-lebdtt.dev.pab.com.cn/',
        // target: 'http://22.4.52.145:8080/',
        // 生产环境
        // target: 'http://iot-lebdtt.pab.com.cn/',
        ws: true, //是否跨域
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  },
    // 第三方插件配置
  pluginOptions: {

  },
  configureWebpack: (config) => {
    if (process.env.NODE_ENV === 'production') {
      // 生产环境
      config.mode = 'production'
    } else {
      // 开发环境
      config.mode = 'development'
    }
  },
  // webpack相关配置
  chainWebpack: (config) => {
    config.resolve.alias
      .set('vue$', 'vue/dist/vue.esm.js')
      .set('@', path.resolve(__dirname, './src'))
    
    // analyzer 打包分析
    // config
    //     .plugin("webpack-bundle-analyzer")
    //     .use(require("webpack-bundle-analyzer").BundleAnalyzerPlugin);
    // 不同环境配置的高德地图cdn文件配置
    // config.plugin("define").tap(args => {
    //     args[0].AMAP_URL = JSON.stringify(process.env.VUE_APP_AMAP_URL);
    //     return args;
    // });
    if (isProd) { 
      config.optimization.splitChunks({
        chunks: "async", // initial async all
        minSize: 1024 * 10, // 30000,
        // maxSize: 0,
        minChunks: 1,
        maxAsyncRequests: 6,
        maxInitialRequests: 4,
        automaticNameDelimiter: "~", // 连接符
        cacheGroups: {
          echarts: {
            chunks: "all",
            name: "chunk-echarts",
            test: /[\\/]node_modules[\\/]echarts(.*)/,
            priority: 15,
            reuseExistingChunk: true
            // enforce: true
          },
          "element-ui": {
            chunks: "all",
            name: "chunk-element-ui",
            test: /[\\/]node_modules[\\/]element-ui(.*)/,
            priority: 15,
            reuseExistingChunk: true
            // enforce: true
          },
          vendors: {
              name: "chunk-vendors",
              test: /[\\\\/]node_modules[\\\\/]/, // 指定是node_modules下的第三方包
              priority: -10,
              chunks: "initial"
              // reuseExistingChunk: true,
              // enforce: true
          },
          common: {
              name: "chunk-common", // 打包后的文件名
              minChunks: 2,
              // maxInitialRequests: 5,
              priority: -20,
              chunks: "initial", //
              reuseExistingChunk: true
          }
        }
      })
    }
  },


}